package com.ocn.li.scmdy.modules.app.controller;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.ocn.li.scmdy.common.utils.R;
import com.ocn.li.scmdy.modules.app.entity.ChannelEntity;
import com.ocn.li.scmdy.modules.app.entity.UserEntity;
import com.ocn.li.scmdy.modules.app.form.LoginForm;
import com.ocn.li.scmdy.modules.app.service.ChannelService;
import com.ocn.li.scmdy.modules.app.service.UserService;
import com.ocn.li.scmdy.modules.app.utils.JwtUtils;

import com.ocn.li.scmdy.modules.app.utils.RsaUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;


/**
 * TODO app登录注册的相关操作
 *
 * @author crazypenguin
 * @version 1.0.0
 * @createdate 2019/1/3
 */
@RestController
@RequestMapping("/app")
@Slf4j
public class AppLoginController {

    @Autowired
    private UserService userService;
    @Autowired
    private JwtUtils jwtUtils;
    @Autowired
    private ChannelService channelService;

    /**
     * 获取token
     *
     * @param form
     * @return
     */
    @PostMapping("/login")
    public R login(@RequestBody LoginForm form) {

        // 手机号密文
        String encrypt = form.getMobile();

        // 渠道编号明文
        String code = form.getCode();

        ChannelEntity channel = channelService.selectOne(new EntityWrapper<ChannelEntity>()
                .eq(code != null,"code", code));

        if("0".equals(channel.getStatus())){
            return R.error("该渠道已禁用");
        }

        String privateKey = channel.getPrivateKey();

        String mobile = RsaUtils.decode(encrypt,privateKey);

        UserEntity user = userService.queryByMobile(mobile);
        Long userId;

//        // 每次登录重新生成私钥和公钥
//        RSA rsa = new RSA();
//        // 获得私钥
//        String privateKey = rsa.getPrivateKeyBase64();
//
//        // 获得公钥
//        String publicKey = rsa.getPublicKeyBase64();

        // 如果用户不存在就创建一个用户,密码默认
        if (user == null) {
            UserEntity o = new UserEntity();
            o.setMobile(mobile);
            o.setUsername(mobile);
//            o.setPassword(privateKey);  // 保存私钥,暂不用
            o.setCreateTime(new Date());
            o.setCoin(0L);

            userService.register(o);

            userId = o.getUserId();
        } else {
            userId = user.getUserId();
//            user.setPassword(privateKey);  // 保存私钥,暂不用
            userService.updateById(user);
        }

        //生成jwt token
        String token = jwtUtils.generateToken(userId,code);

        Map<String, Object> map = new HashMap<>();
        map.put("token", token);
        map.put("expire", jwtUtils.getExpire());
//        map.put("publicKey", publicKey);  // 公钥返回给客户端,暂不用

        return R.ok().put("data",map);
    }


    public static void main(String[] args) {
        String str1 = "{\"success\":\"true\",\"Data\":\"{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"trackId\\\",\\\"default_value\\\":\\\"HZ808081746bb4d101746c3ffa5b03cf\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":false,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"FlowTitleComponent3329\\\",\\\"column_label\\\":\\\"text\\\",\\\"column_name\\\":\\\"流程主题：\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"flowTitle\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":true,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"FlowJinjiComponent3385\\\",\\\"column_label\\\":\\\"select\\\",\\\"column_name\\\":\\\"紧急程度：\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"emergency\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"flowEmergency\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":true,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"STCombobox1978\\\",\\\"column_label\\\":\\\"select\\\",\\\"column_name\\\":\\\"事件来源：\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"EventSources\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"402882ea6931fdd90169321d4873002b\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"CoordSelComponent3537\\\",\\\"column_label\\\":\\\"text\\\",\\\"column_name\\\":\\\"事发地：\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"coordinateId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":true,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"STTextArea3022\\\",\\\"column_label\\\":\\\"textarea\\\",\\\"column_name\\\":\\\"事件详情：\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"402882ea6931fdd90169321d4873002c\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":true,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"eventAttachName\\\",\\\"column_label\\\":\\\"file\\\",\\\"column_name\\\":\\\"附件上传:\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"eventAttachId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":true,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"sponsor_id\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"sponsor_id\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"sponsor_\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"sponsor_\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_code\\\",\\\"default_value\\\":\\\"BaseLine\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_code\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_flowId\\\",\\\"default_value\\\":\\\"dongyingeventreportprocess\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_flowId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_flowName\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_flowName\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_activityId\\\",\\\"default_value\\\":\\\"Start\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_activityId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_activityName\\\",\\\"default_value\\\":\\\"网格员\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_activityName\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_status\\\",\\\"default_value\\\":\\\"NEW\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_status\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_activityInstanceId\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_activityInstanceId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_flowTodoId\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_flowTodoId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_eventId\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_eventId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_flowInstanceId\\\",\\\"default_value\\\":\\\"HZ808081746bb4d101746c3ffa4103ce\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_flowInstanceId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_activityNo\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_activityNo\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_countersignType\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_countersignType\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_assembleId\\\",\\\"default_value\\\":\\\"\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_assembleId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_formId\\\",\\\"default_value\\\":\\\"402882ea69322f9f0169323f63470045\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_formId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"},{\\\"column_key\\\":\\\"\\\",\\\"column_label\\\":\\\"hidden\\\",\\\"column_name\\\":\\\"wf_trackId\\\",\\\"default_value\\\":\\\"HZ808081746bb4d101746c3ffa5b03cf\\\",\\\"english_name\\\":\\\"\\\",\\\"errormsg\\\":\\\"\\\",\\\"id\\\":\\\"wf_trackId\\\",\\\"is_not_null\\\":false,\\\"is_show_in_mobile\\\":true,\\\"readonly\\\":false,\\\"validate\\\":\\\"\\\"}\"}";
        String tmp = StringEscapeUtils.unescapeJavaScript(str1);
        System.out.println("tmp:" + tmp);
    }

}
